home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / cache / source / dev.asm < prev    next >
Encoding:
Assembly Source File  |  1991-10-19  |  5.3 KB  |  385 lines

  1.  
  2. _TEXT        SEGMENT  DWORD PUBLIC 'CODE'
  3. _TEXT        ENDS
  4. _DATA        SEGMENT  WORD PUBLIC 'DATA'
  5. _DATA        ENDS
  6. CONST        SEGMENT  WORD PUBLIC 'CONST'
  7. CONST        ENDS
  8. _BSS        SEGMENT  WORD PUBLIC 'BSS'
  9. _BSS        ENDS
  10. _INST        SEGMENT  WORD PUBLIC 'INST'
  11. _INST        ENDS
  12. DGROUP        GROUP    _TEXT,    CONST,    _BSS,    _DATA,    _INST
  13.  
  14. dev_hed        struc
  15. dev_next    dd    0
  16. dev_sts        dw    0
  17. str_ent        dw    0
  18. int_ent        dw    0
  19. res        db    8 dup (0)
  20. dev_hed        ends
  21.  
  22. DEV_HED_SIZ    equ    size dev_hed
  23.  
  24. MAX_DEV        equ    16
  25.  
  26. extrn        _dmy_dev:near
  27. extrn        _req_ptr:near
  28. extrn        _Device_entry:near
  29. extrn        _setup:near
  30. extrn        _tmp:dword
  31. extrn        _SecLen:word
  32. extrn        _psp_seg:word
  33.  
  34. _TEXT        SEGMENT
  35.         ASSUME  CS: DGROUP, DS: DGROUP, SS: DGROUP
  36.  
  37.         org    02ch
  38. EnvSeg        label    word
  39.  
  40.         org    080h
  41. CmdsLine    label    byte
  42.  
  43.         org    100h
  44.         public    entry
  45. entry:        jmp    main
  46.  
  47. bak_ds_seg    dw    ?
  48. bak_es_seg    dw    ?
  49. dev_tbl        dev_hed    16 dup (<>)
  50.  
  51. ax_reg        dw    ?
  52. bx_reg        dw    ?
  53. cx_reg        dw    ?
  54. dx_reg        dw    ?
  55. si_reg        dw    ?
  56. di_reg        dw    ?
  57. bp_reg        dw    ?
  58. ds_reg        dw    ?
  59. es_reg        dw    ?
  60.  
  61. DMY_STR        macro    n
  62. _str_ent&n&    proc    far
  63.         push    ds
  64.         mov    ds,cs:bak_ds_seg
  65.         mov    word ptr [_req_ptr+n*4],bx
  66.         mov    word ptr [_req_ptr+n*4+2],es
  67.         pop    ds
  68.         ret
  69. _str_ent&n&    endp
  70.         endm
  71.  
  72. DMY_ENT        macro    n
  73. _int_ent&n&    proc    far
  74.         pushf
  75.         mov    cs:ax_reg,ax
  76.         mov    ax,n
  77.         jmp    _int_ent_all
  78. _int_ent&n&    endp
  79.         endm
  80.  
  81. DMY_SET        macro    n
  82.         mov    cs:[bx].str_ent,offset DGROUP:_str_ent&n&
  83.         mov    cs:[bx].int_ent,offset DGROUP:_int_ent&n&
  84.         add    bx,DEV_HED_SIZ
  85.         endm
  86.  
  87. _DevNum        =    0
  88.     rept    MAX_DEV
  89.         DMY_STR    %_DevNum
  90.         DMY_ENT    %_DevNum
  91. _DevNum        =    _DevNum + 1
  92.     endm
  93.  
  94. _int_ent_all    proc    near
  95.         mov    cs:bx_reg,bx
  96.         mov    cs:cx_reg,cx
  97.         mov    cs:dx_reg,dx
  98.         mov    cs:si_reg,si
  99.         mov    cs:di_reg,di
  100.         mov    cs:bp_reg,bp
  101.         mov    cs:ds_reg,ds
  102.         mov    cs:es_reg,es
  103.  
  104.         cld
  105.         mov    ds,cs:bak_ds_seg
  106.         mov    es,cs:bak_es_seg
  107.         push    ax
  108.         call    _Device_entry
  109.         pop    ax
  110.  
  111.         mov    es,cs:es_reg
  112.         mov    ds,cs:ds_reg
  113.         mov    bp,cs:bp_reg
  114.         mov    di,cs:di_reg
  115.         mov    si,cs:si_reg
  116.         mov    dx,cs:dx_reg
  117.         mov    cx,cs:cx_reg
  118.         mov    bx,cs:bx_reg
  119.         mov    ax,cs:ax_reg
  120.         popf
  121.         retf            ; far return !!
  122. _int_ent_all    endp
  123.  
  124.         public    _init_dmy_dev
  125. _init_dmy_dev    proc    near
  126.         push    bx
  127.         mov    cs:bak_ds_seg,ds
  128.         mov    cs:bak_es_seg,es
  129.  
  130.         mov    bx,offset DGROUP:dev_tbl
  131.  
  132. _DevNum        =    0
  133.     rept    MAX_DEV
  134.         DMY_SET    %_DevNum
  135. _DevNum        =    _DevNum + 1
  136.     endm
  137.  
  138.         mov    ax,offset DGROUP:dev_tbl
  139.         mov    dx,cs
  140.  
  141.         pop    bx
  142.         ret
  143. _init_dmy_dev    endp
  144.  
  145.         public    _Dev_str_call
  146. _Dev_str_call    proc    near
  147.         push    bp
  148.         mov    bp,sp
  149.         push    bx
  150.         push    es
  151.         les    bx,[bp+4+4]
  152.         call    dword ptr ss:[bp+4]
  153.         pop    es
  154.         pop    bx
  155.         pop    bp
  156.         ret
  157. _Dev_str_call    endp
  158.  
  159.         public    _Dev_int_call
  160. _Dev_int_call    proc    near
  161.         push    bp
  162.         mov    bp,sp
  163.         call    dword ptr ss:[bp+4]
  164.         pop    bp
  165.         ret
  166. _Dev_int_call    endp
  167.  
  168.         public    _farmemcpy
  169. _farmemcpy    proc    near
  170.         push    bp
  171.         mov    bp,sp
  172.         push    si
  173.         push    di
  174.         push    ds
  175.         push    es
  176.  
  177.         les    di,[bp+4]
  178.         lds    si,[bp+8]
  179.  
  180.         mov    cx,[bp+12]
  181.         shr    cx,1
  182.         jnc    _farmem2
  183.         movsb
  184.  
  185. _farmem2:    jcxz    _farmem3
  186.         rep movsw
  187.  
  188. _farmem3:    pop    es
  189.         pop    ds
  190.         pop    di
  191.         pop    si
  192.         pop    bp
  193.         ret
  194. _farmemcpy    endp
  195.  
  196.  
  197. extrn        _SecLen:word
  198.  
  199.         public    _sum_calc
  200. _sum_calc    proc    near
  201.         push    bp
  202.         mov    bp,sp
  203.         push    si
  204.         push    ds
  205.  
  206.         mov    cx,[bp+8]
  207.         cmp    cx,_SecLen
  208.         jb    _sum_c2
  209.         mov    cx,_SecLen
  210.  
  211. _sum_c2:    lds    si,[bp+4]
  212.         xor    ah,ah
  213.  
  214. _sum_loop:    lodsb
  215.         add    ah,al
  216.         loop    _sum_loop
  217.  
  218.         xor    al,al
  219.         xchg    ah,al
  220.  
  221.         pop    ds
  222.         pop    si
  223.         pop    bp
  224.         ret
  225. _sum_calc    endp
  226.  
  227.         public    _get_DPB
  228. _get_DPB    proc    near
  229.         push    bp
  230.         mov    bp,sp
  231.         push    bx
  232.         push    ds
  233.  
  234.         mov    ah,32h
  235.         mov    dl,[bp+4]
  236.         inc    dl
  237.         int    21h
  238.         jnc    _get_DPB2
  239.  
  240.         mov    ax,0FFFFh
  241.         mov    dx,ax
  242.         jmp    _get_DPB3
  243.  
  244. _get_DPB2:    mov    ax,bx
  245.         mov    dx,ds
  246.  
  247. _get_DPB3:    pop    ds
  248.         pop    bx
  249.         pop    bp
  250.         ret
  251. _get_DPB    endp
  252.  
  253.         public    _link_DPB
  254. _link_DPB    proc    near
  255.         push    bp
  256.         mov    bp,sp
  257.         push    bx
  258.         push    es
  259.  
  260.         mov    ah,52h
  261.         int    21h
  262.         mov    ax,es:[bx]
  263.         mov    dx,es:[bx+2]
  264.  
  265.         pop    es
  266.         pop    bx
  267.         pop    bp
  268.         ret
  269. _link_DPB    endp
  270.  
  271.         public    _msg_disp
  272. _msg_disp    proc    near
  273.         push    bp
  274.         mov    bp,sp
  275.  
  276.         mov    dx,[bp+4]
  277.         mov    ah,9
  278.         int    21h
  279.  
  280.         pop    bp
  281.         ret
  282. _msg_disp    endp
  283.  
  284. _TEXT        ENDS
  285.  
  286. _INST        segment
  287.         ASSUME CS: DGROUP, DS: DGROUP, SS: DGROUP
  288.  
  289. Start_init    label    word
  290.  
  291. main        proc    near
  292.         mov    ax,cs
  293.         mov    ds,ax
  294.         mov    es,ax
  295.         mov    [_psp_seg],ax
  296.         cld
  297.  
  298.         mov    sp,offset DGROUP:Local_Stack
  299.         mov    bx,sp
  300.         add    bx,15
  301.         mov    cl,4
  302.         shr    bx,cl
  303.         mov    ah,4Ah
  304.         int    21h
  305.  
  306.         mov    ax,offset DGROUP:CmdsLine
  307.         push    ax
  308.         call    _setup
  309.         add    sp,2
  310.         cmp    ax,0
  311.         je    tsr_go
  312.  
  313.         mov    ax,4C00h        ; End of
  314.         int    21h
  315.  
  316. tsr_go:        mov    es,[EnvSeg]
  317.         mov    word ptr [EnvSeg],0
  318.         mov    ah,49h            ; Free ENV Seg
  319.         int    21h
  320.  
  321.         mov    dx,offset DGROUP:Start_init
  322.         add    dx,15
  323.         mov    cl,4
  324.         shr    dx,cl
  325.  
  326.         mov    ax,cs
  327.         add    ax,dx
  328.         mov    word ptr [_tmp+2],ax
  329.         mov    word ptr [_tmp],0
  330.  
  331.         mov    ax,[_SecLen]
  332.         add    ax,15
  333.         mov    cl,4
  334.         shr    ax,cl
  335.         add    dx,ax
  336.  
  337.         mov    ax,3100h        ; TSR End of
  338.         int    21h
  339.  
  340. main        endp
  341.  
  342.         public    _DOS_allocmem
  343. _DOS_allocmem    proc    near
  344.         push    bp
  345.         mov    bp,sp
  346.         push    bx
  347.  
  348.         mov    ah,48h
  349.         mov    bx,[bp+4]
  350.         int    21h
  351.         jc    _D_alcerr
  352.  
  353.         mov    bx,[bp+6]
  354.         mov    [bx],ax
  355.         xor    ax,ax
  356.         jmp    _D_alcend
  357.  
  358. _D_alcerr:    mov    ax,-1
  359. _D_alcend:    pop    bx
  360.         pop    bp
  361.         ret
  362. _DOS_allocmem    endp
  363.  
  364.         public    _DOS_memfree
  365. _DOS_memfree    proc    near
  366.         push    bp
  367.         mov    bp,sp
  368.         push    es
  369.  
  370.         mov    ax,[bp+4]
  371.         mov    es,ax
  372.         mov    ah,49h
  373.         int    21h
  374.  
  375.         pop    es
  376.         pop    bp
  377.         ret
  378. _DOS_memfree    endp
  379.  
  380.         db    1024 dup (?)
  381. Local_Stack    label    word
  382.  
  383. _INST        ends
  384.         END    entry
  385.